您的位置:首页 > 编程语言 > Go语言

GOF23的一些总结(二)

2016-12-23 17:05 288 查看
二、工厂模式 ,实现了创建者和调用者的分离。

详细分类:简单工厂模式,工厂方法模式,抽象工厂模式

面向对象的基本原则:

OCP(开闭原则):一个软件实体应当对扩展开放,对修改关闭。

DIP(依赖倒转原则):要针对接口编程,不要针对实现编程。

LOD(迪米特法则):只与你直接的朋友通信,而避免和陌生人通信。

核心作用:实例化对象,用工厂方法代替new操作。将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。

工厂模式:

简单工厂模式:用来生产同一等级结构中的任意产品。(对于增加新的产品,需要修改已经有的代码)

工厂方法模式:用来生产同一等级结构中的固定产品。(支持增加任意产品)

抽象工厂模式:用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)


//简单工厂

public class CarFactory{
publics tatic Car createCar(String type){
if("奥迪".equals(type)){
return new Audi();
}else if("比亚迪".equals(type)){
return new Byd();
}else{
return null;
}
}
}




简单工厂的另外一种实现方式

public class CarFactory{
public static Car createAudi(){
return new Audi();
}
public static Car createByd(){
return new Byd();
}
}


要点:简单工厂模式也叫静态工厂模式,工厂类一般使用静态方法,不修改代码的话,无法扩展。

//实现工厂方法模式(1)

public interface CarFactory{
Car createrCar();
}


实现工厂方法模式(2)

public class AudiFactory implements CarFactory{
@Override
public Car createCar(){
return new Audi();
}
}


要点:扩展的时候更符合OCP原则,只需要添加一个实体类和添加一个新的工厂方法。





//抽象工厂模式

用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)

抽象工厂模式是工厂方法模式的升级版本,存在多个业务品种,业务分类时,通过抽象工厂模式生产需要的对象是一种非常好的解决方式。



public interface Engine{
void run();
void start();
}


public class LuxuryEngine implements Engin{
@Override
public void run(){
System.out.println("转得快!");
}
@Override
public void start(){
System.out.println("启动快!可以自动启停");
}
}


public class LowerEngine implements Engin{
@Override
public void run(){
System.out.println("转得慢!");
}
@Override
public void start(){
System.out.println("启动慢!");
}
}


public interface Seat{
void massage();
}


public class LuxurySeat implements Seat{
@Override
public void massage(){
System.out.println("可以按摩,座垫加热!");
}
}


public class LowerSeat implements Seat{
@Override
public void massage(){
System.out.println("普通座垫!");
}
}


public interface Tyre{
void revolve();
}


public class LuxuryTyre implements Tyre{
@Override
public void revolve(){
System.out.println("旋转磨损慢");
}
}


public class LowerTyre implements Tyre{
@Override
public void revolve(){
System.out.println("旋转磨损快");
}
}


抽象工厂接口

public interface CarFactory{
Engine createEngine();
Seat createSeat();
Tyre createTyre();
}


具体的工厂

public class LuxuryCarFactory implements CarFactory{
@Override
public Engine createEngine(){
return new LuxuryEngine();
}
@Override
public Seat createSeat(){
return new LuxurySeat();
}
@Override
public Tyre createTyre(){
return new LuxuryTyre();
}
}


public class LowerCarFactory implements CarFactory{
@Override
public Engine createEngine(){
return new LowerEngine();
}
@Override
public Seat createSeat(){
return new LowerSeat();
}
@Override
public Tyre createTyre(){
return new LowerTyre();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息