初探工厂和策略模式

工厂模式

需要在一个统一的地方创建对象。

public class BMW320{
    public BMW320(){
        System.out.print("制造-->BMW320");
    }
}
public class BMW320{
    public BMW320(){
        System.out.print("制造-->BMW320");
    }
}
public class Customer{
    public static void main(String[] args){
        BMW320 bmw320 = new BMW320();
        BMW320 bmw523 = new BMW320();
    }
}
//产品类
abstract class BMW {
    public BMW(){
    }
}

public class BMW320 extends BMW {
    public BMW320() {
    	System.out.println("制造-->BMW320");
    }
}
public class BMW523 extends BMW{
    public BMW523(){
    	System.out.println("制造-->BMW523");
    }
}


//工厂类
public class Factory{
    public BMW createBmw(int type){
        switch(type){
            case 320:
                return new BMW320();
            case 523:
                return new BMW523();
            default:
                break;
        }
        return null;
    }
}

//客户类
public class Customer{
    public static void main(String[] args){
        Factory factory = new Factory();
        BMW bmw320 = factory.createBmw(320);
        BMW bmw523 = factory.createBmw(523);
    }
}
  1. 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,用来创建产品。
  2. 抽象产品角色:一般是具体产品继承的父类或实现的接口。
  3. 具体产品角色:工厂类所创建的对象就是此角色的实力。在java中由一个具体类实现。

⼯⼚⽅法模式

简单含义:工厂上面又多了个工厂。

⼯⼚⽅法模式去掉了简单⼯⼚模式中⼯⼚⽅法的静态属性,使得它可以被⼦类继承。这样在简单⼯⼚模式⾥,集中在⼯⼚⽅法上的压⼒,可以由⼯⼚⽅法模式⾥不同的⼯⼚⼦类来分担。

⼯⼚⽅法模式组成

1)抽象⼯⼚(工厂上面又抽象了一个工厂)⻆⾊: 这是⼯⼚⽅法模式的核⼼,它与应⽤程序⽆关。是具体⼯⼚⻆⾊必须实现的接⼝或者必须继承的⽗类。在JAVA中它由抽象类或者接⼝来实现。

2)具体⼯⼚⻆⾊:它含有和具体业务逻辑有关的代码。由应⽤程序调⽤以创建对应的具体产品的对 象。

3)抽象产品⻆⾊:它是具体产品继承的⽗类或者是实现的接⼝。在JAVA中⼀般有抽象类或者接⼝来实 现。

4)具体产品⻆⾊:具体⼯⼚⻆⾊所创建的对象就是此⻆⾊的实例。在JAVA中由具体的类来实现。 (开闭原则)当有新的产品产⽣时,只要按照抽象产品⻆⾊、抽象⼯⼚⻆⾊提供的合同来⽣成,那么 就可以被客户使⽤,⽽不必去修改任何已有 的代码。

策略模式

定义:定义⼀组算法,将每⼀个算法封装起来,从⽽使它们可以相互切换。

特点:

1)⼀组算法,那就是不同的策略。

2)这组算法都实现了相同的接⼝或者继承相同的抽象类,所以可以相互切换。

策略模式涉及到的⻆⾊有三个:

  • 封装⻆⾊:上层访问策略的⼊⼝,它持有抽象策略⻆⾊的引⽤。

  • 抽象策略⻆⾊:提供接⼝或者抽象类,定义策略组必须拥有的⽅法和属性。

- 具体策略⻆⾊:实现抽象策略,定义具体的算法逻辑。

策略模式的优点

(1)策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了⼀个算法或⾏为族。恰当使 ⽤继承可以把公共的代码移到⽗类⾥⾯,从⽽避免代码重复。

(2)使⽤策略模式可以避免使⽤多重条件(if-else)语句。多重条件语句不易维护,它把采取哪⼀种算法或采取哪⼀种⾏为的逻辑与算法或⾏为的逻辑混合在⼀起,统统列在⼀个多重条件语句⾥⾯,⽐使⽤继 承的办法还要原始和落后。

策略模式的缺点

(1)客户端必须知道所有的策略类,并⾃⾏决定使⽤哪⼀个策略类。这就意味着客户端必须理解这些 算法的区别,以便适时选择恰当的算法类。换⾔之,策略模式只适⽤于客户端知道算法或⾏为的情况。

(2)由于策略模式把每个具体的策略实现都单独封装成为类,如果备选的策略很多的话,那么对象的数⽬就会很可观。

编写不易,转载注明出处:https://www.cnblogs.com/lmh15054109/p/13861561.html

原文地址:https://www.cnblogs.com/lmh15054109/p/13861561.html