2019-05-28 java设计模式

来源 设计模式之禅---作者-秦小波


import java.util.ArrayList;
import java.util.Vector;

public class T {
}


////1.单例模式
//
//class Sigleton {
//    private static final Sigleton  sigleton = new Sigleton();
//    //限制产生多个对象
//    private Sigleton(){
//
//    }
//
//    public static Sigleton getSigleton(){
//        return sigleton;
//    }
//
//    public static void doSomething(){
//
//    }
//}
//
//
////2.工厂方法
//
//abstract class Product{
//    //产品类的公共方法
//    public void method1(){
//
//    }
//    //抽象方法
//    public abstract void method2();
//}
//
//class ConcreteProduct1 extends Product {
//
//    @Override
//    public void method2() {
//        //业务处理逻辑
//    }
//}
//
//class ConcreteProduct2 extends Product{
//
//    @Override
//    public void method2() {
//        //业务处理逻辑
//    }
//}
//
//abstract class Creator{
//    //创建一个产品
//    public abstract <T extends Product> T createProduct(Class<T> c);
//}
//
//class ConcreteCreator extends Creator {
//
//    @Override
//    public <T extends Product> T createProduct(Class<T> c) {
//        Product product = null;
//        try {
//            product = (Product)Class.forName(c.getName()).newInstance();
//        }catch (Exception e){
//            //异常处理
//        }
//        return (T)product;
//    }
//}
//
////场景类(main)
//class client{
//    public static void main(){
//        Creator creator = new ConcreteCreator();
//        Product product = creator.createProduct(ConcreteProduct1.class);
//        //继续业务
//    }
//}
//
//
////3.抽象工厂模式
//abstract class AbstractProductA{
//    //每个产品共用的方法
//    public void shareMethod(){
//
//    }
//    //每个产品相同方法不同实现
//    public abstract void doSomething();
//}
//
//class ProductA extends AbstractProductA {
//
//    @Override
//    public void doSomething() {
//        System.out.println("产品A1的实现方法");
//    }
//}
//
//class ProductB extends AbstractProductA{
//
//    @Override
//    public void doSomething() {
//        System.out.println("产品A2的实现方式");
//    }
//}
//
//abstract class AbstractCreator{
//    //创建A产品家族
//    public abstract AbstractProductA createProductA();
//}
//
//class Creator1 extends AbstractCreator {
//
//    @Override
//    public AbstractProductA createProductA() {
//        return new ProductA();
//    }
//}
//
//class Creator2 extends AbstractCreator {
//
//    @Override
//    public AbstractProductA createProductA() {
//        return new ProductB();
//    }
//}
//
////4.模板方法模式
//
//abstract class AbstractClass {
//    //基本方法
//    protected abstract void doSomething();
//    //基本方法
//    protected abstract void doAnyThing();
//    //模板方法  为了防止恶意操作,一般模板方法都加上final关键字,不允许被覆写
//    public final void templeteMethod(){
//        //调用基本方法完成相关的逻辑
//        this.doAnyThing();
//        this.doSomething();
//    }
//}
//
//class ConcreteClass1 extends AbstractClass {
//
//    @Override
//    protected void doSomething() {
//        //业务逻辑处理
//    }
//
//    @Override
//    protected void doAnyThing() {
//        //业务逻辑处理
//    }
//}
//class ConcreteClass2 extends AbstractClass {
//
//    @Override
//    protected void doSomething() {
//        //业务逻辑处理
//    }
//
//    @Override
//    protected void doAnyThing() {
//        //业务逻辑处理
//    }
//}
//class client4 {
//    public static void main(String[] args){
//        AbstractClass class1 = new ConcreteClass1();
//        AbstractClass class2 = new ConcreteClass2();
//        //调用模板方法
//        class1.templeteMethod();
//        class2.templeteMethod();
//    }
//}

//*******************分割线分割线分割线分割线分割线分割线分割线分割线***************************//

//class Product {
//    public void doSomething(){
//        //独立业务处理
//    }
//}
//
//abstract class Builder{
//    //设置产品的不同部分,以获得不同的产品
//    public abstract void setPart();
//    //建造产品
//    public abstract Product buildProduct();
//}
//
////注意:有多少个产品类就有几个具体的构建者
//class ConcreteProduct extends Builder {
//    private Product product = new Product();
//    @Override
//    public void setPart() {
//        //产品类内的逻辑处理
//    }
//
//    //组建一个产品
//    @Override
//    public Product buildProduct() {
//        return product;
//    }
//}
//
////导演者,起到封装的作用,避免高层模块深入到建造者内部的实现类。
//class Director {
//    private Builder builder = new ConcreteProduct();
//    //构建不同的产品
//    public Product getAproduct(){
//        builder.buildProduct();
//        //设置不同的零件,产生不同的产品
//        return builder.buildProduct();
//    }
//}
//
////6.代理模式
//interface Subject {
//    //定义一个方法
//    void request();
//}
//class RealSubject implements Subject {
//
//    @Override
//    public void request() {
//        //业务逻辑处理
//    }
//}
//
//class Proxy implements Subject {
//    //要代理哪个实现类
//    private Subject subject = null;
//    //默认被代理者
//    public Proxy(){
//        this.subject=new Proxy();
//    }
//    public Proxy(Object ...objects){
//    }
//    public Proxy(Subject subject){
//        this.subject = subject;
//    }
//
//    @Override
//    public void request() {
//        this.before();
//        this.subject.request();
//        this.after();
//    }
//
//    //预处理
//    private void before(){
//
//    }
//    //善后处理
//    private void after(){
//
//    }
//}
//
////7.原型模式
//
//class PrototypeClass implements Cloneable{
//
//    //覆写父类Object方法
//    @Override
//    protected Object clone()  {
//        PrototypeClass prototypeClass = null;
//        try {
//            prototypeClass = (PrototypeClass) super.clone();
//        }catch (CloneNotSupportedException e){
//
//        }
//        return prototypeClass;
//    }
//}
//
////8.中介者模式
//
////抽象中介者模式
//abstract class Mediator {
//    //定义同事类
//    protected ConcreteColleague1 c1;
//    protected ConcreteColleague2 c2;
//    //通过getter和setter把同事类注入进来;
//    public ConcreteColleague1 getC1(){
//        return c1;
//    }
//    public void setC1(ConcreteColleague1 c1){
//        this.c1 = c1;
//    }
//    public ConcreteColleague2 getC2() {
//        return c2;
//    }
//
//    public void setC2(ConcreteColleague2 c2){
//        this.c2 = c2;
//    }
//
//    //中介者模式的业务;
//    public abstract void doSomething1();
//    public abstract void doSomething2();
//
//}
//
//
//class ConcreteMediator extends Mediator{
//
//    @Override
//    public void doSomething1() {
//        //调用同事的方法只要是public都可以调用
//        super.c1.selfMethod();
//        super.c2.selfMethod();
//    }
//
//    @Override
//    public void doSomething2() {
//        super.c1.selfMethod();
//        super.c2.selfMethod();
//    }
//}
//
//
////抽象同事类
//abstract class Colleague {
//    protected Mediator mediator;
//    public Colleague(Mediator mediator){
//        this.mediator = mediator;
//    }
//}
//
//class ConcreteColleague1 extends Colleague {
//
//    public ConcreteColleague1(Mediator mediator) {
//        super(mediator);
//    }
//    public void selfMethod(){
//        //处理自己的业务逻辑
//    }
//    public void depMethod1(){
//        //处理自己的业务逻辑
//        //自己不能处理的委托给中介者处理
//        super.mediator.doSomething1();
//    }
//
//}
//
//class ConcreteColleague2 extends Colleague {
//
//    public ConcreteColleague2(Mediator mediator) {
//        super(mediator);
//    }
//
//    public void selfMethod(){
//        //处理自己的业务逻辑
//    }
//    public void depMethod1(){
//        //处理自己的业务逻辑
//        //自己不能处理的委托给中介者处理
//        super.mediator.doSomething2();
//    }
//}
//
//
////9.命令模式
//abstract class Receiver {
//    //抽象接收者,定义每个接收者都必须完成的业务
//    public abstract void doSomething();
//}
//
//class CurrentReceiver1 extends Receiver{
//    //每个接收者必须处理一定的业务
//    @Override
//    public void doSomething() {
//
//    }
//}
//class CurrentReceiver2 extends Receiver {
//    //每个接收者必须处理一定的业务
//    @Override
//    public void doSomething() {
//
//    }
//}
//abstract class Command{
//    //每个命令类都必须有一个执行的事
//    public abstract void execute();
//}
//class ConcreteCommand1 extends Command {
//    private Receiver receiver;
//
//    public ConcreteCommand1(Receiver receiver){
//        this.receiver = receiver;
//    }
//    @Override
//    public void execute() {
//        this.receiver.doSomething();
//    }
//}
//
//class ConcreteCommand2 extends Command {
//    private Receiver receiver;
//
//    public ConcreteCommand2(Receiver receiver){
//        this.receiver = receiver;
//    }
//    @Override
//    public void execute() {
//        this.receiver.doSomething();
//    }
//}
//
//class Invoker {
//    private Command command;
//    //受气包,接收命令
//    public void  setCommand(Command command){
//        this.command = command;
//    }
//    //执行命令
//    public void action(){
//        this.command.execute();
//    }
//}
//class Client9 {
//    public static void main(String[] args){
//        //首先声明调用者Invoker
//        Invoker invoker = new Invoker();
//        //定义接收者
//        Receiver receiver = new CurrentReceiver1();
//        //定义一个发送给接收者的命令
//        Command command = new ConcreteCommand1(receiver);
//        invoker.setCommand(command);
//        invoker.action();
//    }
//}
//
////10.责任链模式
//abstract class Handler {
//    private Handler nextHandler;
//    //设置下一个处理者是谁
//    public void setNext(Handler handler){
//        this.nextHandler = handler;
//    }
//    protected abstract Level getHandlerLevel();
//    //每个处理者都必须要处理任务
//    protected abstract Response echo(Request request);
//    //每个处理者都必须对请求做出处理
//    public final Response handleMessage(Request request){
//        Response response = null;
//        if(this.getHandlerLevel().equals(request.getRequestLevel())){
//            response = this.echo(request);
//        }
//        if(this.nextHandler != null){
//            response = this.nextHandler.handleMessage(request);
//        }else {
//            //没有适当的处理者,业务自行处理
//        }
//        return response;
//
//    }
//}
//class Level{
//    //定义一个请求和处理等级
//}
//class Request{
//    //请求的等级
//    public Level getRequestLevel(){
//        return null;
//    }
//}
//class Response {
//    //处理者返回的数据
//}
//
//class ConcreteHandler1 extends Handler {
//
//    @Override
//    protected Level getHandlerLevel() {
//        return null;
//    }
//
//    @Override
//    protected Response echo(Request request) {
//        return null;
//    }
//}
//class ConcreteHandler2 extends Handler {
//
//    @Override
//    protected Level getHandlerLevel() {
//        return null;
//    }
//
//    @Override
//    protected Response echo(Request request) {
//        return null;
//    }
//}
//
//class ConcreteHandler3 extends Handler {
//
//    @Override
//    protected Level getHandlerLevel() {
//        return null;
//    }
//
//    @Override
//    protected Response echo(Request request) {
//        return null;
//    }
//}
//
//class client10{
//    public static void main(String[] args){
//        Handler handler1 = new ConcreteHandler1();
//        Handler handler2 = new ConcreteHandler2();
//        Handler handler3 = new ConcreteHandler3();
//        handler1.setNext(handler2);
//        handler2.setNext(handler3);
//        Response response = handler1.handleMessage(new Request());
//    }
//}


////////////////*********************************分割线***************************************//////


//11.装饰者模式

///*抽象构件
//abstract class Component {
//    public abstract void operate();
//}
//
//class ConcreteComponent extends Component {
//
//    @Override
//    public void operate() {
//        System.out.println("do something");
//    }
//}
////抽象装饰者
//abstract class Decorator extends Component {
//    private Component component = null;
//    public Decorator(Component component){
//        this.component = component;
//    }
//
//    @Override
//    public void operate() {
//        this.component.operate();
//    }
//}
//
//class ConcreteDecorator1 extends Decorator {
//
//    public ConcreteDecorator1(Component component) {
//        super(component);
//    }
//
//    private void method1(){
//        System.out.println("method1修饰");
//    }
//
//    @Override
//    public void operate() {
//        this.method1();
//        super.operate();
//    }
//}
//
//class ConcreteDecorator2 extends Decorator {
//
//    public ConcreteDecorator2(Component component) {
//        super(component);
//    }
//
//    private void method1(){
//        System.out.println("method1修饰");
//    }
//
//    @Override
//    public void operate() {
//        this.method1();
//        super.operate();
//    }
//}
//
//class Client11{
//    public static void main(String[] args){
//        Component component = new ConcreteComponent();
//        component = new ConcreteDecorator1(component);
//        component = new ConcreteDecorator2(component);
//        component.operate();
//    }
//}
//
////12.策略模式
//
//interface Strategy{
//    public void doSomething();
//}
//
//class ConcreteStrategy1 implements Strategy {
//
//    @Override
//    public void doSomething() {
//        System.out.println("具体策略1的运算法则");
//    }
//}
//class ConcreteStrategy2 implements Strategy {
//
//    @Override
//    public void doSomething() {
//        System.out.println("具体策略1的运算法则");
//    }
//}
//class Context {
//    //抽象策略
//    private Strategy strategy = null;
//    public Context(Strategy strategy){
//        this.strategy = strategy;
//    }
//
//    public void doAnything(){
//        this.strategy.doSomething();
//    }
//
//}
//
//class Client12 {
//    public static void main(String[] args){
//       Strategy  strategy = new ConcreteStrategy1();
//       Context context = new Context(strategy);
//       context.doAnything();
//    }
//}
//
////13.适配器模式
//interface Target{
//    void request();
//}
//
//class ConcreteTarget implements Target {
//
//    @Override
//    public void request() {
//        System.out.println("if you need help,please call me!");
//    }
//}
//
//class Addaptee{
//    public void dosomething(){
//        System.out.println("i'm kind of busy,leave me alone ,pls");
//    }
//}
//class Adapter extends Addaptee implements Target {
//
//    @Override
//    public void request() {
//        super.dosomething();
//    }
//}
//
//class Client13 {
//    public static void main(String[] args){
//        //原有的业务逻辑
//        Target target = new ConcreteTarget();
//        target.request();
//        //现在增加了适配器角色后的逻辑
//        Target target2 = new Adapter();
//        target2.request();
//    }
//}

//14.迭代器模式 省略

//15.组合模式

abstract class Component {
    //个体和整体都具有的共享
    public void dosomething(){}
}

//树枝构建
class Composite extends Component {
    //构件容器
    private ArrayList<Component> componentArrayList = new ArrayList<>();
    //
    public void add(Component component){
        this.componentArrayList.add(component);
    }
    //删除一个叶子构件或树枝构件
    public void remove(Component component){
        this.componentArrayList.remove(component);
    }
    public ArrayList<Component> getChildren(){
        return this.componentArrayList;
    }
}

class Leaf extends Component{
    @Override
    public void dosomething() {
        super.dosomething();
    }
}

class Client15 {
    public static void main(String[] args){
        Composite root = new Composite();
        root.dosomething();

        Composite branch = new Composite();
        Leaf leaf = new Leaf();

        root.add(branch);
        branch.add(leaf);
    }

    //递归遍历
    public static void display(Composite root){
        for(Component item : root.getChildren()){
            if(item instanceof Leaf){
                item.dosomething();
            }else {
                display((Composite)item);
            }
        }
    }
}

//16.观察者模式
abstract class Subject {
    //定义一个观察者数组
    private Vector<Observer> obsVector = new Vector<>();
    public void addObserver(Observer o){
        obsVector.add(o);
    }
    public void delObserver(Observer o){
        obsVector.remove(o);
    }
    //通知所有观察者
    public void notifyObservers(){
        for(Observer item : obsVector){
            item.update();
        }
    }
}

class ConcreteSubject extends Subject{
    public void dosomething(){
        /**
         * do something
         */
        super.notifyObservers();
    }
}
interface Observer{
    void update();
}

class ConcreteObserver implements Observer {

    @Override
    public void update() {
        System.out.println("接收到消息,并进行处理!");
    }
}

class client{
    public static void main(String[] args){
        ConcreteSubject subject = new ConcreteSubject();
        Observer o = new ConcreteObserver();
        subject.addObserver(o);
        subject.dosomething();
    }
}

//17.门面模式
class ClassA{
    public void doSomethingA(){
        //业务逻辑
    }
}
class ClassB{
    public void doSomethingB(){}
}

class ClassC{
    public void doSomethingC(){

    }
}
class Facade{
    //被委托的对象
    private ClassA a = new ClassA();
    private ClassB b = new ClassB();
    private ClassC c = new ClassC();
    //提供给外部访问的方法
    public void doSomethingA(){
        this.a.doSomethingA();
    }
    public void doSomethingB(){
        this.b.doSomethingB();
    }
    public void doSomethingC(){
        this.c.doSomethingC();
    }

}

//18.备忘录模式
class Originator {
    //内部状态
    private String state = "";

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    //创建一个备忘录
    public Memento createMemento(){
        return new Memento(this.state);
    }
    //恢复一个备忘录
    public void restoreMemento(Memento memento){
        this.setState(memento.getState());
    }
}
class Memento{
    private String  state = "";
    public Memento(String state){
        this.state = state;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }
}

//备忘录管理员角色
class Caretaker {
    private Memento memento;
    public Memento getMemento() {
        return memento;
    }

    public void setMemento(Memento memento) {
        this.memento = memento;
    }
}

class Client18 {
    public static void main(String[] args){
        //定义出发起人
        Originator originator = new Originator();
        //定义出备忘录管理员
        Caretaker caretaker = new Caretaker();
        //创建出一个备忘录
        caretaker.setMemento(originator.createMemento());
        originator.restoreMemento(caretaker.getMemento());
    }
}

////19.访问者模式
//
////抽象元素
//abstract class Element {
//    //定义业务逻辑
//    abstract void doSomething();
//    abstract
//}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352