计算机微刊我爱编程让前端飞

大话设计模式之简单工厂模式与策略模式

2018-08-08  本文已影响1人  在北方玩弹子球

前言

面向对象的特点

【箭头指向】:带三角箭头的实线,箭头指向父类


image

【箭头指向】:带三角箭头的虚线,箭头指向接口

image image image

【代码体现】:成员变量

【箭头及指向】:带实心菱形的实线,菱形指向整体


image

【代码表现】:局部变量、方法的参数或者对静态方法的调用

【箭头及指向】:带箭头的虚线,指向被使用者

image

泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖 + 下面这张UML图,比较形象地展示了各种类图关系:

image

简单工厂模式

//抽象产品角色  
public interface Car{  
      public void drive();  
}  
//具体产品角色  
public class Benz implements Car{  
      public void drive() {  
         System.out.println("Driving Benz ");  
      }  
}  
public class Bmw implements Car{  
      public void drive() {  
       System.out.println("Driving Bmw ");  
      }  
}  
//工厂类角色  
public class Driver{  
        //工厂方法.注意 返回类型为抽象产品角色  
         public static Car driverCar(String s)throws Exception{  
               //判断逻辑,返回具体的产品角色给Client  
               if(s.equalsIgnoreCase("Benz"))  
                    return new Benz();  
               else if(s.equalsIgnoreCase("Bmw"))  
                        return new Bmw();  
                 else throw new Exception();  
       }  
}

策略模式

abstract class Strategy{
    //算法方法
    public void AlgorithmInterface();
}
ConcreteStrategy类封装了具体的算法或行为,继承Strategy类。
public class ConcreteStrategyA extend Strategy{
    //算法A实现方法
    public void AlgorithmInterface(){
            //算法A实现方法
    }
}
public class ConcreteStrategyB extend Strategy{
    //算法B实现方法
    public void AlgorithmInterface(){
            //算法B实现方法
    }
}
Context类,用一个ConcreteStrategy来配置,维护一个对Strategy对象的引用。
public class Context{
    Strategy strategy;
    public Context(Strategy strategy){  //初始化时,传入具体的策略对象
        this.strategy = strategy;
    }
    //上下文接口
    public void ContextInterface(){    //根据具体的策略对象调用其算法方法
        strategy.AlgorithmInterface();
    }
} 
//主函数代码:
public static void main(String[] args) {
    Context context;
    //由于实例化不同的策略,在调用context.AlgorithmInterface();时,所获得的结果也不同。
    context = new Context(new ConcreteStrategyA());
    context.AlgorithmInterface();
    context = new Context(new ConcreteStrategyB());
    context.AlgorithmInterface();
}

策略与工厂结合

public class Context{
    Strategy strategy = null;  //声明一个接口对象
    public Context(String type){  //初始化时,在Context类中实现简单工厂的应用。
        switch(type){
        case "需求一":
            Strategy s1 = new ConcreteStrategyA();
            strategy = s1;
            break;
        case "需求二":
            Strategy s2 = new ConcreteStrategyB();
            strategy = s2;
            break;
        }
    }
    public double GetResult(){
        return strategy..AlgorithmInterface();
    }
}

//工厂模式用法
Strategy s = StrategyFactory.createStrategy(type);
... = s.GetResult();
//策略与工厂结合
Context c = Context(type);
... = c.GetResult();

策略模式解析

只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑运用策略模式处理这种可能性变化。


关注微信公众号【轮子工厂】后台回复关键字:
1.回复【图书】:获取15本新手自学编程,零基础入门经典学习教材;
2.回复【我要造轮子】:获取100多本我根据知乎上面关于计算机问题的高赞回答里面的介绍整理出来的书籍;
3.回复【开发工具】:获取几大主流编程语言的开发工具~
4.回复【ps教程】:获取ps视频免费教程;
5.回复【早起】:每天早上7点准时叫你起床;
希望能帮助到你~

上一篇下一篇

猜你喜欢

热点阅读