电商网站的特点搜狗网站制作

当前位置: 首页 > news >正文

电商网站的特点,搜狗网站制作,网站开发的报告,轻量响应wordpress主题工厂模式 工厂设计模式是一种创建型设计模式#xff0c;它提供了一种封装对象创建过程的机制#xff0c;将对象的创建与使用分离。 这种设计模式允许我们在不修改客户端代码的情况下引入新的对象类型。 在Java中#xff0c;工厂设计模式主要有三种形式#xff1a;简单工厂…工厂模式 工厂设计模式是一种创建型设计模式它提供了一种封装对象创建过程的机制将对象的创建与使用分离。 这种设计模式允许我们在不修改客户端代码的情况下引入新的对象类型。 在Java中工厂设计模式主要有三种形式简单工厂模式、工厂方法模式和抽象工厂模式。 简单工厂模式 用来生成同一等级结构中的任意产品。 注对增加新的产品需要修改已有的代码这违背了面向对象设计原则中的开闭原则对扩展开放对修改关闭 UML 实现代码 Animal.java // 定义一个动物的接口 public interface Animal {// 接口中定义一个抽象的方法叫声void makeSound(); }Cat.java // 定义一个实现类实现Animal接口 public class Cat implements Animal{// 猫属于动物实现发出叫声的接口Overridepublic void makeSound() {System.out.println(喵喵喵);} }Dog.java // 定义一个实现类实现Animal接口 public class Dog implements Animal{// 狗属于动物实现发出叫声的接口Overridepublic void makeSound() {System.out.println(汪汪汪);} } SimpleAnimalFactory.java // 定义一个简单工厂类用于创建动物 public class SimpleAnimalFactory {// 定义一个创建动物的方法用于生产不同的动物的静态方法public static Animal createAnimal(String type) {if (Cat.equalsIgnoreCase(type)) {return new Cat();}else if (Dog.equalsIgnoreCase(type)) {return new Dog();}else {return null;}} }TestClient.java public class TestClient {public static void main(String[] args) {// 根据简单工厂创建不同的动物执行动作// 生产一个CatAnimal cat SimpleAnimalFactory.createAnimal(cat);cat.makeSound();// 生产一个DogAnimal dog SimpleAnimalFactory.createAnimal(Dog);dog.makeSound();} } 执行结果 结论 简单工厂好处在于对于客户端调用时我们不需要关心具体实现只需要调用工厂方法传入参数获取我们需要返回的结果即可。 但是对于同一个产品动物如果我们进行新增猪则必须要修改Factory中createAnimal(String type)方法。因此违背了开闭原则 工厂方法模式 用来生产同一等级结构中的固定产品。 支持增加任意产品满足开闭原则但设计相对于简单工厂复杂一些 UML 实现代码 Product.java // 定义一个产品接口 public interface Product {//定义一个抽象的使用的方法void use(); }ProductA.java // ProductA实现Product接口 public class ProductA implements Product{Overridepublic void use() {System.out.println(ProductA 使用了);} }ProductB.java // ProductB实现Product接口 public class ProductB implements Product{Overridepublic void use() {System.out.println(ProductB 使用了);} }ProductFactory.java // 定义一个ProductFactory工厂接口 public interface ProductFactory {// 接口中定义一个创建Product的方法Product createProduct(); }ProductAFactory.java // 创建一个ProductA的工厂实现ProductFactory接口用于生产ProductA public class ProductAFactory implements ProductFactory{Overridepublic Product createProduct() {return new ProductA();} }ProductBFactory.java // 创建一个ProductB的工厂实现ProductFactory接口用于生产ProductB public class ProductBFactory implements ProductFactory{Overridepublic Product createProduct() {return new ProductB();} }TestClient.java public class TestClient {public static void main(String[] args) {// 创建ProductAProduct product1 new ProductAFactory().createProduct();product1.use();// 创建ProductBProduct product2 new ProductBFactory().createProduct();product2.use();} }执行结果 从工厂方式模式我们可以看出我们可以任意增加同一产品而不会影响到原来已有产品 创建一个产品C继承Product接口创建一个产品C的Factory类生产C,使用是通过相应Factory调用生产C即可。 如果产品中新增一个方法则所有实现了Product接口的方法都必须修改相应方法。 抽象工厂模式 用来生产不同产品族的全部产品。 对增加新的产品无能为力支持增加产品族 UML 实现代码 Engine.java // 定义发动机接口 public interface Engine {// 定义发动机 发动方法void run();// 定义发动机 停止方法void stop(); } HighEndEngine.java // 创建一个高端发动机实现发动机 public class HighEndEngine implements Engine{Overridepublic void run() {System.out.println(高端发动机-跑的快);}Overridepublic void stop() {System.out.println(高端发动机-刹车性能强);} }LowEndEngine.java // 创建一个低端发动机实现发动机 public class LowEndEngine implements Engine{Overridepublic void run() {System.out.println(低端发动机-跑的慢);}Overridepublic void stop() {System.out.println(低端发动机-刹车性能弱);} }CarBody.java // 定义一个车身接口 public interface CarBody {// 定义一个乘坐的方法void ride(); }HighEndCarBody.java // 创建一个高端车身实现车身 public class HighEndCarBody implements CarBody{Overridepublic void ride() {System.out.println(高端车身-奢华-安全);} }LowEndCarBody.java // 创建一个低端车身实现车身 public class LowEndCarBody implements CarBody{Overridepublic void ride() {System.out.println(低端车身-朴素-看起来安全);} }Tyre.java // 定义一个轮胎接口 public interface Tyre {// 定义轮胎转动的方法void run(); } HighEndTyre.java // 创建一个高端轮胎实现轮胎 public class HighEndTyre implements Tyre{Overridepublic void run() {System.out.println(高端轮胎-太空材料-安全-耐磨);} }LowEndTyre.java // 创建一个低端轮胎实现轮胎 public class LowEndTyre implements Tyre{Overridepublic void run() {System.out.println(低端轮胎-普通材料-易磨损);} }CarFactory.java // 定义Car的接口 public interface CarFactory {// 创建发动机Engine engine();// 创建车身CarBody carBody();// 创建轮胎Tyre tyre(); }HighEndCarBody.java // 高端汽车工厂实现汽车工厂 public class HighEndCarFactory implements CarFactory{Overridepublic Engine engine() {return new HighEndEngine();}Overridepublic CarBody carBody() {return new HighEndCarBody();}Overridepublic Tyre tyre() {return new HighEndTyre();} }LowEndCarFactory.java // 低端汽车工厂实现汽车工厂 public class LowEndCarFactory implements CarFactory{Overridepublic Engine engine() {return new LowEndEngine();}Overridepublic CarBody carBody() {return new LowEndCarBody();}Overridepublic Tyre tyre() {return new LowEndTyre();} }TestClient.java public class TestClient {public static void main(String[] args) {// 使用高端汽车工厂类 创建高端汽车HighEndCarFactory highEndCar new HighEndCarFactory();highEndCar.engine().stop();highEndCar.carBody().ride();highEndCar.tyre().run();System.out.println();// 使用低端汽车工厂类 创建低端汽车LowEndCarFactory lowEndCar new LowEndCarFactory();lowEndCar.engine().stop();lowEndCar.carBody().ride();lowEndCar.tyre().run();} } 执行结果 抽象工厂不可以增加产品比如CarFactory一旦定下了如果我们要新增新的部件则所有实现CarFactory的类都需实现该方法。 但是抽象工厂可以根据已有的接口创建更多的产品族比如定义一个中端汽车工厂调用高端发动机低端轮胎低端车身等任意组合成新的Factory 对比及应用场景 简单工厂模式 优点 实现了对象的创建和使用的责任分割客户端只需要传入正确的参数就可以获取需要的对象无需知道创建细节。工厂类中有必要的判断逻辑可以决定根据当前的参数创建对应的产品实例客户端可以免除直接创建产品对象的责任。 缺点 工厂类职责过重如果产品种类增加工厂类的代码会变得庞大且复杂不利于维护。简单工厂模式违背了开放封闭原则因为每次增加新产品时都需要修改工厂类的代码。 适用场景 创建对象较少且对象的创建逻辑不复杂时。客户端不关心对象的创建过程只关心使用对象时。
工厂方法模式 优点 将对象的创建推迟到子类中进行使得类的实例化更加灵活和可扩展。降低了客户端与具体产品类之间的耦合度客户端只需要知道对应的工厂无需知道具体的产品类。 缺点 增加了系统的抽象性和理解难度需要引入额外的工厂接口和工厂类。如果产品类较少使用工厂方法模式可能会增加不必要的复杂性。 适用场景 需要创建大量相似对象时可以使用工厂方法模式来简化对象的创建过程。当一个类需要由其子类来指定创建哪个对象时可以使用工厂方法模式。但实际开发中简单工厂比工厂方法使用的更多
抽象工厂模式 优点 提供了创建一系列相关或相互依赖对象的接口无需指定它们具体的类。增加了系统的灵活性和可扩展性可以通过更换不同的工厂来实现不同的产品族。 缺点 规定了所有可能被创建的产品集合产品族中扩展新的产品困难。如果产品族中的产品较少使用抽象工厂模式可能会导致代码冗余和复杂性增加。 适用场景 当需要创建一组相互关联或相互依赖的对象时可以使用抽象工厂模式。当一个系统需要独立地变化其创建的对象时抽象工厂模式是一个很好的选择。
gitee源码 git clone https://gitee.com/dchh/JavaStudyWorkSpaces.git