电子商务网站建设策划书,东莞单位网站建设,动态图片在线制作,安徽建工招采平台一、工厂模式(分为#xff1a;简单工厂模式、工厂方法模式、抽象工厂模式) 实现了创建者和调用者的分离 核心本质#xff1a;1、实例化对象#xff0c;用工厂方法代替new操作#xff1b;2、将选择实现类、创建对象统一管理和控制#xff0c;从而将调用者跟实现类解耦。 简…一、工厂模式(分为简单工厂模式、工厂方法模式、抽象工厂模式) 实现了创建者和调用者的分离 核心本质1、实例化对象用工厂方法代替new操作2、将选择实现类、创建对象统一管理和控制从而将调用者跟实现类解耦。 简单工厂模式用来生产同一等级结构中的任意产品对于增加的新的产品需要修改已有代码 工厂方法模式用来生产同一等级结构中的固定产品支持增加任意产品 抽象工厂模式用来生产不同产品族中的全部产品对于增加新的产品无能为力。支持增加新的产品族 【扩展】面向对象设计的基本原则(核心就是分工) OCP(开闭原则Open-Closed Principle)一个软件的实体应当对扩展开放对修改关闭。 DIP(依赖倒转原则Dependence Inversion Principe)要针对接口编程不要针对实现编程。 LoD(迪米特法则Law of Demeter)只与你直接的朋友通信避免和陌生人通信(某个类尽量与少的类反生依赖关系)。 二、各种模式详解 1、简单工厂模式(静态工厂模式) /*** 一个汽车类 接口 */
package cn.sxt.pattern;public interface Car {void run();
}/** 奥迪类* */
package cn.sxt.pattern;public class Audi implements Car{public void run() {System.out.println(奥迪在跑); }
}/*** 比亚迪类*/
package cn.sxt.pattern;public class Byd implements Car{public void run() {System.out.println(比亚迪在跑);}
} 【没有采用工厂模式】 /**** 没有采用工厂模式的情况下*/
package cn.sxt.pattern;public class Test_0423_Client01 {//调用者public static void main(String[] args) {Car carnew Audi();Car car2new Byd();car.run();car2.run(); }
} 类图 【采用简单工厂模式】 /**** 简单工厂模式用来生产同一等级结构中的任意产品对于增加的新的产品需要修改已有代码* 工厂方法模式用来生产同一等级结构中的固定产品支持增加任意产品* 抽象工厂模式用来生产不同产品族中的全部产品对于增加新的产品无能为力。支持增加新的产品族* 采用简单工厂模式的一个工厂如果要增加新的子类如“红旗”类只能修改已有的代码 (return null) 做修改但是违反开闭原则* */
package cn.sxt.pattern;public class Test_0423_Factory {public static Car createCar(String type) {if (奥迪.equals(type)) {return new Audi(); }else if (比亚迪.equals(type)) {return new Byd(); }else {return null;} }//也可以采用这种方式去创建类对象所以也称它为静态方法
/* public static Car createAudi(){return new Audi();}public static Car createByd() {return new Byd(); }*/
}/**** 采用简单工厂模式的情况下*/
package cn.sxt.pattern;public class Test_0423_Client02 {//调用者public static void main(String[] args) {Car carTest_0423_Factory.createCar(奥迪);//不用直接与Audi类打交道,而是与工厂类打交道,通过调用方法new对象Car car2Test_0423_Factory.createCar(比亚迪);car.run();car2.run(); }
} 类图 2、工厂方法模式 【一个工厂方法接口和客户类】 /**** 工厂方法模式用来生产同一等级结构中的固定产品支持增加任意产品*/
package cn.sxt.pattern;public interface Test_0423_Factory2 {Car createCar();
}
/**** 采用工厂方法模式的情况下*/
package cn.sxt.pattern;
public class Test_0423_Client03 {//调用者public static void main(String[] args) {Car carnew AudiFactory().createCar();Car car2new BydFactory().createCar();//如果要造奔驰那么直接增加benz.java和benzFactory.java这样不需要修改原有代码符合开闭原则。但是会增加代码量car.run();car2.run(); }
} 【各种车型的工厂】 /*** 奥迪专门的工厂*/
package cn.sxt.pattern;public class AudiFactory implements Test_0423_Factory2 {public Car createCar() {return new Audi();}}/**比亚迪专门的工厂* */
package cn.sxt.pattern;public class BydFactory implements Test_0423_Factory2 {public Car createCar() {return new Byd();}} 类图 3、抽象工厂模式 用来生产不同产品族的全部产品 抽象工厂模式是针对产品族的情况在多个业务品种、业务分类时通过抽象工厂模式产生需要的对象是个很好解决办法。 【产品族】 一个产品族发动机、座椅、轮胎 由 高级发动机、高级座椅、高级轮胎组成一个高级产品族 生成一个高端汽车 由 低级发动机、低级座椅、低级轮胎组成一个低级产品族 生成一个低端汽车。 【一个产品族】 /**** 发动机接口*/
package cn.sxt.abstractFactory;public interface Engine {void run();void start();
}class LuxuryEngine implements Engine{ //好发动机类 public void run() {System.out.println(转的快); }public void start() {System.out.println(启动快); }
}class LowEngine implements Engine{ //差发动机类 public void run() {System.out.println(转的慢); }public void start() {System.out.println(启动慢); }
}/**** 座椅接口*/
package cn.sxt.abstractFactory;public interface Seat {void comfortable();
}class LuxurySeat implements Seat{ //好座椅类 public void comfortable() {System.out.println(坐着舒服); }
}class LowSeat implements Seat{ //差座椅类 public void comfortable() {System.out.println(坐着难受); }
}/**** 轮胎接口*/
package cn.sxt.abstractFactory;public interface Tyre {void friction();
}class LuxuryTyre implements Tyre{ //好轮胎类 public void friction() {System.out.println(摩擦力大); }
}class LowTyre implements Tyre{ //差轮胎类 public void friction() {System.out.println(摩擦力小); }
} 【工厂类】 /**** 造汽车的工厂接口*/
package cn.sxt.abstractFactory;public interface Test_0423_Factory03 {Engine createEngine();Seat createSeat();Tyre createTyre();
}/*** //造高端汽车的工厂*/
package cn.sxt.abstractFactory;public class LuxuryCarFactory implements Test_0423_Factory03{ public Engine createEngine() {return new LuxuryEngine();//返回好发动机的对象}public Seat createSeat() {return new LuxurySeat();}public Tyre createTyre() {return new LuxuryTyre();}
}/*** //造低端汽车的工厂*/
package cn.sxt.abstractFactory;public class LowCarFactory implements Test_0423_Factory03{ public Engine createEngine() {//返回差发动机的对象return new LowEngine();}public Seat createSeat() {return new LowSeat();}public Tyre createTyre() {return new LowTyre();}
} 【一个客户对象】 /**** 采用抽象工厂模式的情况下*/
package cn.sxt.abstractFactory;public class Test_0423_Client04 {//调用者public static void main(String[] args) {Test_0423_Factory03 factorynew LuxuryCarFactory();Engine enginefactory.createEngine();engine.run();engine.start();Test_0423_Factory03 factory2new LowCarFactory();Tyre tyrefactory2.createTyre();tyre.friction();}
} 【类图】 转载于:https://www.cnblogs.com/ID-qingxin/p/10747583.html