设计模式
来源:互联网 发布:哪里有淘宝小号买 编辑:程序博客网 时间:2024/06/07 02:52
一、设计模式六大原则
单一职责原则: adapter做适配的事 Bean做Bean的处理
开放封闭原则:像调用jar里面的函数 模块 只能用 不能改
里氏替换原则:像多态 子类可以复制给父类的引用 反过来 不行
依赖倒置原则:说了等于没说
迪米特原则: 说了等于没说
设计模式分为三类:
创建类型模式:单例、工厂、建造者...
结构型设计模式:适配器、代理、桥接...
行为型设计模式:策略、观察者、迭代器...
1.单例模式
保证一个类只有一个实例,并提供一个全局访问点 使用场景:项目中共享的数据 消耗资源多的对象 工具类对象
public class Singleton { private Singleton(){}/* * 饿汉模式 类加载时就完成初始化 获取对象块 没有同步问题 */private static Singleton instance=new Singleton();public static Singleton getInstance(){return instance;}/* * 懒汉模式 */ private static Singleton instance2; public static synchronized Singleton getInstance2(){ if(instance2==null) instance2=new Singleton(); return instance2; } /* * 双重检查模式 DCL */ private volatile static Singleton singleton3; public static Singleton getInstance3(){ if(singleton3==null){ synchronized(Singleton.class){ singleton3=new Singleton(); } } return singleton3; } /* * 静态内部类 */ public static Singleton getInstance4(){ return SingHolder.sholder; } private static class SingHolder{ private static final Singleton sholder=new Singleton(); }}
2.简单工厂模式
又名静态工厂方法模式 这是由一个工厂对象决定创建出哪一种产品类的实例
(1) 抽象产品类
package factory;public abstract class Computer {/* * 产品的抽象方法 由具体的产品类实现 */public abstract void start();}
(2)具体产品类
package factory;public class LenovoCom extends Computer{@Overridepublic void start() {// TODO Auto-generated method stubSystem.out.println("我是联想计算机");}}
(3)工厂类
package factory;public class ComFactory {public static Computer createComputer(String type){Computer mcomp=null;if(type.equals("lenovo"))mcomp=new LenovoCom();else if(type.equals("huawei"))mcomp=new Huawei();return mcomp;}}
(2)客户端调用工厂类
package factory;public class MyComputer {public static void main(String[] args) {// TODO Auto-generated method stubComFactory.createComputer("lenovo").start();;}}
3.观察者模式
即发布-订阅模式 在项目中经常使用的模式
(1)抽象观察者
package observer;public interface Observer {//定义一个更新消息的方法public void update(String message);}(2)具体观察者
package observer;public class UserWeixin implements Observer{//微信用户private String name; public UserWeixin(String name){ this.name=name; }@Overridepublic void update(String message) {// TODO Auto-generated method stubSystem.out.println(name+" - "+message);}}(3)抽象被观察者
package observer;public interface Subject {/* * 新增订阅者 */public void attach(Observer observer);/* * 删除订阅者 */public void detach(Observer observer);/* * 通知订阅者更新消息 */public void notify(String message);}
(4)具体被观察者模式
package observer;import java.util.ArrayList;import java.util.List;public class SubscriptionSubject implements Subject {//存储订阅公众号的用户private List<Observer> userList=new ArrayList<Observer>();@Overridepublic void attach(Observer observer) {// TODO Auto-generated method stubuserList.add(observer);}@Overridepublic void detach(Observer observer) {// TODO Auto-generated method stubuserList.remove(observer);}@Overridepublic void notify(String message) {// TODO Auto-generated method stubfor(Observer observer:userList){observer.update(message);}}}
(5)客户端调用
package observer;public class Client {public static void main(String[] args) {// TODO Auto-generated method stubSubscriptionSubject mssubject=new SubscriptionSubject();//用户 UserWeixin user1=new UserWeixin("钟惠华"); UserWeixin user2=new UserWeixin("薛翠英"); UserWeixin user3=new UserWeixin("王大婶"); //订阅公众号 mssubject.attach(user1); mssubject.attach(user2); mssubject.attach(user3); //公众号更新发消息给订阅了的用户 mssubject.notify("周末去小梅沙一浪 message"); //user1 走了 退订了 mssubject.detach(user1); //公众号更新发消息给订阅了的用户 mssubject.notify("周末去浪啊 message"); }}
阅读全文
0 0
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式~~~~~~~~~~
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 彻底理解js中this的指向
- Java反射
- 设计模式——观察者模式
- jquery获取上传图片的尺寸
- XCode 8.2 CI命令行打包失败
- 设计模式
- Ar 将虚拟东西放在你周围 ,Vr 将你放在虚拟环境中
- git 删除错误提交的commit
- super的使用方法与使用范围
- 骚猪队的模板
- Perl 在windows下打印中文乱码问题
- JAVA中静态代码块的用法 static关键字用法详解 类的加载顺序
- Android 插件化 RePlugin 入坑记录一
- MySQL 并集、交集、差集