一、常见的设计原则
1、概念
2、常见的设计原则
1、开闭原则
对修改关闭,对扩展开发
反射+配置文件+工厂等等
2. 里式代换原则
任何父类可以出现的地方,都可以使用子类替换
面向对象中:多态 子类 is a 分类
3. 依赖倒转原则
软件设计过程中尽量去依赖接口和抽象类
4. 接口隔离原则
尽量依赖小接口
降低的代码的耦合度
5. 合成复用原则
尽量实现代码的复用,而不是使用继承
把类作为另一个类的属性
class Person{
Student stu;
}
class Person extends Student{
Student stu;
}
6. 迪米特法则
高内聚,低耦合
耦合: 一个类/模块和其他类/模块之间的依赖关系
内聚: 一个类/模块的功能聚集起来放在类和模块的内部
二、设计模式
1. 设计模式概念
一套被反复使用,分类编目的代码设计经验的总结
在软件设计过程中总结出来的套路,是针对固定场合的处理方案
2. 分类
创建型模式:
工厂模式,单例模式,建造者模式,原型模式
结构型模式:
适配器,代理,装饰者,外观、桥接、享元,组合模式
行为型模式:
策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、
备忘录模式、状态模式、访问者模式、中介者模式、解释器模式
3. 常见的设计模式
1、单例设计模式
单例,单个实例,单例类在当前进程中只能创建一个实例<br /> <br /> 实现单例的步骤:<br /> 1.私有构造方法<br /> 2.在当前类中调用构造方法的实例对象<br /> 3.在当前类中创建方法,返回当前类实例<br /> 4.将获取实例的方法提升到类级别,使用static修饰
public class Singleton{private Singleton(){}private static Singleton sin=new Singleton();public static Singleton getInstance(){return sin;}//懒汉式单例:public static Singleton2 getInstance(){if(manager == null){//----------System.out.println("into");synchronized (TaskManager2.class) {if(manager == null){manager = new TaskManager2();}}}return manager;}}
2. 模板设计模式
定义一个功能骨架,其中存在固定的功能实现和可变的功能实现
将变化的功能抽取出去,传递给子类实现
package cn.blb.deign.mode;public abstract class OperationMode {/**模板设计模式* 操作冰箱*/public void Operation(){System.out.println("开门");if (style()){System.out.println("存东西");}else{System.out.println("取东西");}System.out.println("关门");}public abstract boolean style();}----------------------------------------------------------package cn.blb.deign.mode;public class Person extends OperationMode {@Overridepublic boolean style() {return false;}}package cn.blb.deign.mode;------------------------------------------------------------public class TestPerson {public static void main(String[] args) {Person p=new Person();p.style();p.Operation();}}
3. 策略设计模式
定义 并封装一系列的算法,使其可以互相替换,不影响使用的客户
package cn.blb.deign.strategy;public interface IPayStyle {public void payMoney(int money);}package cn.blb.deign.strategy;public class Customer {IPayStyle iPayStyle;//多态public void show(IPayStyle iPayStyle){//身份的方法this.iPayStyle=iPayStyle;}/*** 付钱*/public void pay(int money){iPayStyle.payMoney(money);}}package cn.blb.deign.strategy;public class GJCustom implements IPayStyle {//高级会员@Overridepublic void payMoney(int money) {System.out.println(money*0.6);}package cn.blb.deign.strategy;public class PTCustom implements IPayStyle {@Overridepublic void payMoney(int money) {System.out.println(money*0.8);}}package cn.blb.deign.strategy;public class StrategyDemo {public static void main(String[] args) {//1. 创建消费者Customer customer = new Customer();//2. 出示身份customer.show( new PTCustom());//3. 付钱customer.pay(1000);}}
4. 代理设计模式 (重要)
定义代理对象,为被代理者执行相应的操作,并且提供额外功能处理
5. 观察者模式.
组成: <br /> 被观察者接口<br /> 注册称为观察者方法<br /> 取消方法<br /> 通知方法<br /> 观察者接口<br /> 接受通知的方法<br /> 具体的观察者<br /> 具体的被观察者<br />注意:<br /> /**<br /> * 在具体的被观察者中,申明集合存储观察者的信息<br /> */<br /> private List<Observer> obs = new ArrayList<>()
6. 适配器
将某个类的接口转换成客户端期望的另一个接口的表示形式
消除了由于接口不匹配所造成类的不兼容问题
7. 装饰者
动态的给对象增加功能
名字:
总基类
装饰者基类
被装饰者基类
注意:
装饰者持有被装饰者引用
装饰者和被装饰者具有相同的接口(父类)
