开闭原则:OCP,open-closed principle
对修改关闭,对扩展开放。
设计模式是为了,降低耦合和提高程序的可维护性和可扩展性。
CHANGE带给我们的噩梦
面向基类编程。
1、简单工厂模式
简单工厂模式中,工厂负责生产的产品的抽象基类,也可以是接口
/**
* abstract base class of car.工厂产品的抽象基类
*/
public abstract class Car {
abstract void drive();
}
奔驰车的实现类
/**
* BenzCar extends abstract base class Car
*/
class BenzCar extends Car {
@Override
void drive() {
System.out.print("BenzCar");
}
}
宝马车的实现类
class BMWCar extends Car {
/**
* implement base abstract method drive.
* @author pingxm
*
*/
@Override
void drive() {
System.out.print("BMWCar");
}
}
上面是工厂负责产生的对象(工厂产品)的结构
下面是工厂类:CarFactory.java
/**
* the factory that product Car
*/
public class CarFactory {
public static Car createCar(String carName)
{
if("benz".equals(carName))
return new BenzCar();
if("BMW".equals(carName))
return new BMWCar();
return null;
}
}
简单工厂模式的优点:
封装对象的创建过程,根据需要(carName)创建对象.降低client和产品的耦合
缺点:工厂和产品的依赖关系比较强,如果扩展Car,比如增加奥迪车,需要修改工厂类,增加if else,工厂不符合OCP
简单工厂模式的改进:
/**
* the factory that product Car
*/
public class CarFactory {
/**
* @return Car
*/
public static Car createCar(String carType)
{
Car car = null;
Class carClass = null ;
try {
carClass = Class.forName(carType);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
try {
//实际应用中可能不是简单的newInstance
//可以根据配置文件设置属性值,关系等
car = (Car)carClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return car;
}
}
通过类名去加载具体类,这样就降低了工厂和具体实现类的耦合。
但是这样依然需要传入具体类的类名,依然存在依赖关系
我们可以使用配置文件来 配置 描述符和类的完全限定名,从而降低耦合
properties文件
benzCar = package.BenzCar
BMWCar = package.BMWCar
分享到:
相关推荐
工厂模式可以隐藏对象创建的复杂性,使得客户端代码更加简洁;而观察者模式则允许我们实现事件驱动的编程,使得组件之间可以松散耦合地通信。 CHM文件可能涵盖了每种设计模式的定义、用途、实现方式以及优缺点,并...
- 抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而无需指定具体类。 - 建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 - 组合模式:允许你将对象组合...
六个创建型模式 六个创建型模式 简单工厂模式-Simple Factory Pattern 工厂三兄弟之简单工厂模式(一) 工厂三兄弟之简单工厂模式(二) 工厂三兄弟之简单工厂模式(三) 工厂三兄弟之简单工厂模式(四) 工厂方法...
创建型模式主要关注对象的创建,如单例模式、工厂方法模式和抽象工厂模式。这些模式允许我们控制对象的实例化过程,使得对象的创建过程更加灵活,同时也隐藏了具体的实现细节。例如,单例模式确保一个类只有一个实例...
- 抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。 - 建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的...
简单工厂模式提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。这种模式简化了客户端代码,并使其与具体的实现细节解耦。 #### 2.2 工厂方法模式 工厂方法模式定义了一个创建对象的接口,...
1. **创建型模式**:这一类模式主要关注对象的创建过程,包括单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式。它们提供了一种在不指定具体对象类型的情况下创建对象的方法,使得系统更加灵活,易于...
这一部分主要介绍了工厂模式、抽象工厂模式、单例模式、建造者模式以及原型模式。 ##### 工厂模式 工厂模式是一种常用的创建型模式,其核心思想是在不指定具体类的情况下创建一个对象。这种模式通过定义一个用于...
3. **抽象工厂模式**:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。 4. **建造者模式**:将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 5. **原型模式**:...
"Design pattern In JavaScript"这个主题涵盖了一系列广泛使用的模式,这些模式可以分为三大类:创建型、结构型和行为型。 1. **创建型模式**: - **工厂模式**:它提供了一种创建对象的接口,但允许子类决定实例...
本资源"23种设计模式的C++实现DesignPattern-master.zip"包含了以下设计模式的C++实现: 1. **创建型模式**: - **单例模式(Singleton)**:保证一个类只有一个实例,并提供全局访问点。 - **工厂方法模式...
本资料包“DesignPattern - DesignPattern.zip”提供了对C++11中23种设计模式的全面讲解,特别是结合指针使用的部分,以下是对这些知识点的详细阐述: 1. **单例模式(Singleton)**:确保一个类只有一个实例,并...
创建型模式包括单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式和简单工厂模式。单例模式确保一个类只有一个实例,并提供一个全局访问点。工厂模式通过将实例化对象的代码从使用该对象的代码中分离出来...
装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许在运行时给对象添加新的行为或职责,同时保持对象...同时,装饰器模式也常常与其他设计模式(如工厂模式、代理模式)结合使用,以实现更复杂的设计需求。
在Go中,我们可以使用接口和结构体组合来实现简单工厂或者抽象工厂模式,以便在不指定具体类的情况下创建对象。 2. **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。在Go中,由于语言特性,单例的...
3. **抽象工厂模式**:为创建一组相关或相互依赖的对象提供一个接口,而无需指定它们的具体类。这在处理不同平台或环境下的对象创建时特别有用。 4. **建造者模式**:将一个复杂对象的构建与其表示分离,使得同样的...
##### 3.1 简单工厂模式 (Simple Factory Pattern) 简单工厂模式提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。该模式适用于当一个系统只需要提供一个产品族中的一个实例时。 1. **工厂...
- **抽象工厂模式**:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。 2. **结构型设计模式**: - **适配器模式**:将不兼容的接口转换为客户期望的接口。 - **装饰器模式**:动态地给一...
工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 2 结构型模式---这些设计模式关注类和...
《DesignPattern设计模式》是软件开发领域中的一部经典之作,它主要探讨的是在面向对象编程中如何设计可复用、高效且具有高质量的代码。设计模式是对在软件设计过程中遇到的常见问题的一种最佳实践解决方案的总结,...