### Java的23种设计模式知识点详解 #### 一、创建型模式 ##### 1.1 工厂方法模式 **定义**: 工厂方法模式定义了一个用于创建对象的接口,但允许子类决定实例化哪个类。工厂方法让类的实例化推迟到子类。 **适用场景**: 1. 当一个类不知道它所必须创建的对象的类时。 2. 当一个类希望由它的子类来指定它所创建的对象时。 3. 当将创建对象的责任委托给多个帮助子类中的某一个时,并且希望将哪一个帮助子类是代理者的信息局部化时。 **参与者**: - **Product**:定义工厂方法所创建的对象的接口。 - **ConcreteProduct**:实现Product接口。 - **Creator**:声明工厂方法,该方法返回一个Product类型的对象;Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象;可以调用工厂方法以创建一个Product对象。 - **ConcreteCreator**:重定义工厂方法以返回一个ConcreteProduct实例。 **示例**: ```java // Product public interface Work { void doWork(); } // ConcreteProduct public class StudentWork implements Work { public void doWork() { System.out.println("学生做作业!"); } } public class TeacherWork implements Work { public void doWork() { System.out.println("老师批改作业!"); } } // Creator public abstract class WorkFactory { public abstract Work createWork(); } // ConcreteCreator public class StudentWorkFactory extends WorkFactory { @Override public Work createWork() { return new StudentWork(); } } public class TeacherWorkFactory extends WorkFactory { @Override public Work createWork() { return new TeacherWork(); } } ``` ##### 1.2 抽象工厂模式 **定义**: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 **适用场景**: 1. 一个系统要独立于它的产品的创建、组合和表示时。 2. 一个系统要由多个产品系列中的一个来配置时。 3. 当你要强调一系列相关的产品对象的设计以便进行联合使用时。 **参与者**: - **Product**:产品接口。 - **ConcreteProduct**:具体产品实现。 - **AbstractFactory**:工厂接口。 - **ConcreteFactory**:具体工厂实现。 **示例**: ```java // Abstract Factory public interface ShapeFactory { Shape getShape(String shapeType); } // Concrete Factories public class CircleShapeFactory implements ShapeFactory { @Override public Shape getShape(String shapeType) { return new Circle(); } } public class SquareShapeFactory implements ShapeFactory { @Override public Shape getShape(String shapeType) { return new Square(); } } // Products public interface Shape { void draw(); } public class Circle implements Shape { @Override public void draw() { System.out.println("Drawing Circle"); } } public class Square implements Shape { @Override public void draw() { System.out.println("Drawing Square"); } } ``` #### 二、结构型模式 ##### 1.2.1 适配器模式 **定义**: 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 **适用场景**: 1. 想使用一个已经存在的类,而它的接口不符合需求。 2. 想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(如来自不同公司的类库)协同工作。 3. 希望复用现有适配者类的功能,但是无法修改其接口。 **参与者**: - **Target**:目标接口。 - **Adaptee**:待适配的类。 - **Adapter**:适配器类。 **示例**: ```java // Target public interface AdvancedMediaPlayer { void playVlc(String fileName); void playMp4(String fileName); } // Adaptee public class VlcPlayer implements AdvancedMediaPlayer { @Override public void playVlc(String fileName) { System.out.println("Playing VLC file. Name: " + fileName); } @Override public void playMp4(String fileName) { // Do nothing } } // Adapter public class MediaAdapter implements MediaPlayer { private AdvancedMediaPlayer advancedMusicPlayer; public MediaAdapter(String audioType) { if (audioType.equalsIgnoreCase("vlc")) { advancedMusicPlayer = new VlcPlayer(); } else if (audioType.equalsIgnoreCase("mp4")) { advancedMusicPlayer = new Mp4Player(); } } @Override public void play(String audioType, String fileName) { if (audioType.equalsIgnoreCase("vlc")) { advancedMusicPlayer.playVlc(fileName); } else if (audioType.equalsIgnoreCase("mp4")) { advancedMusicPlayer.playMp4(fileName); } } } ``` 以上内容涵盖了给定文件的部分内容中提及的设计模式类型及其详细解释。每种模式都有其特定的应用场景和优势,在实际开发中合理选择和应用这些模式能够提高代码的可维护性和扩展性。
剩余68页未读,继续阅读
- xiaozhu30142014-05-28值得学习。
- liming_17972014-11-08非常好,经典的模式一定要记住
- kevin_garnett232012-09-03支持,设计模式还是有必要学好的。
- kevin420672692013-01-01设计模式是程序员内功修炼的必修课,该文档内容详实,值得学习。
- ffyyy1232012-11-29不知道是不是我的adobe的问题,有些字显示不出来
- 粉丝: 0
- 资源: 16
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助