设计模式:
1、设计模式是什么?
设计模式是前辈对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。
2、学习设计模式的意义
- 设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。
- 正确使用设计模式具有以下优点:
- 可以提高程序员的思维能力、编程能力和设计能力
- 使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。
- 使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。
3、设计模式的基本要素
- 模式名称
- 问题
- 解决方案
- 效果
4、GOF23(23种设计模式)
- 创建型模式:
- 单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式。
- 结构型模式:
- 适配器模式,桥接模式,装饰模式,组合模式,外观模式,享元模式,代理模式
- 行为型模式:
- 模板方法模式,命令模式,迭代器模式,观察者模式,中介者模式,备忘录模式,解释器
模式,状态模式,策略模式,职责链模式,访问者模式。
- 模板方法模式,命令模式,迭代器模式,观察者模式,中介者模式,备忘录模式,解释器
5、OOP的七大原则:
- 开闭原则:对扩展开放,对修改关闭
- 里氏替换原则:继承必须确保超类所拥有的性质在子类中仍然成立
- 依赖倒置原则:要面向接口编程,不要面向实现编程。
- 单一职责原则:控制类的粒度大小、将对象解耦、提高其内聚性。
- 接口隔离原则:要为各个类建立它们需要的专用接口
- 迪米特法则:只与你的直接朋友交谈,不跟“陌生人”说话。
- 合成复用原则:尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。
一、单例模式:
二、工厂模式:
作用:
实现了创建者和调用者的分离
详细分类:
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
核心本质:
实例化对象不使用new,电工厂方法代
将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。
三种模式:
简单工厂模式
- 用来生产同一等级结构中的任意产品(对于增加新的产品,
需要球盖已有代码)工厂方法模式
- 用来生产同一等级结构中的固定产品(支持增加任意产品)抽象工厂模式
围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。
2.1、简单工厂模式:
我们用代码来演示一次: 需求就是顾客去购买手机
public interface TelePhone {
void name(); //创建接口
}
public class Huawei implements TelePhone {
@Override
public void name() {
System.out.println("华为手机");
}
}
public class Iphone implements TelePhone {
@Override
public void name() {
System.out.println("苹果手机");
}
}
public class Consumer {
public static void main(String[] args) {
Huawei huawei = new Huawei();
Iphone iphone = new Iphone();
android.name();
huawei.name();
iphone.name();
}
}
我们可以看到在使用普通方式去构建的时候我们需要频繁的去new 一个对象–>我们尝试加入简单的工厂模式
然后我们看看添加简单工厂模式后的代码–>新增一个工厂类,我们实现的逻辑:
可以看到我们在加一层Factory后我们可以直接在工厂里面拿到内容,不在需要频繁的去New一个对象,就满足:
- 实例化对象不使用new,电工厂方法代
- 将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。
我们来看一下代码实例:
public class TelePhoneFactory {
public static TelePhone getPhone(String name){
if (name.equalsIgnoreCase("huawei")){
return new Huawei();
}else if (name.equalsIgnoreCase("Iphone")){
return new Iphone();
}else{
return new Android();
}
}
}
在看消费者:
public class Consumer {
public static void main(String[] args) {
// Android android = new Android();
// Huawei huawei = new Huawei();
// Iphone iphone = new Iphone();
//
// android.name();
// huawei.name();
// iphone.name();
TelePhone huawei = TelePhoneFactory.getPhone("huawei");
TelePhone android = TelePhoneFactory.getPhone("android");
huawei.name();
android.name();
}
这样我们就得到了一个简单的工厂模式,要了解到原理哟!
2.2、工厂方法模式:
2.2、工厂方法模式:
然我们看一下方法模式,简单的来说就是一个产品对应一个工厂的方式
继续来看一下代码的实现,但是我们现在只举一个例子,在看的小伙伴一定要自己下去实现一次。
Interface
public interface PhoneFactory {
TelePhone getPhone();
}
public class AndroidPhoneFactory implements PhoneFactory{
@Override
public TelePhone getPhone() {
return new Android();
}
}
public class Consumer {
public static void main(String[] args) {
AndroidPhoneFactory android = new AndroidPhoneFactory();
android.getPhone().name();
}
}
这样工厂方法模式就实现啦!