RV2-Java:常用的设计模式
创始人
2024-03-25 13:43:09
0

2.1 简介

  本文主要内容: 工厂模式、迭代器模式、适配器模式、装饰者模式、代理模式、责任链模式、观察者模式、单例模式。


2.2 软件设计的原则

  1. 单一职责原则;
  2. 里氏替换原则;
  3. 依赖倒置原则;
  4. 接口隔离原则;
  5. 迪米特原则;
  6. 开闭原则。

2.3 内容

2.3.1 工厂模式

1. 定义
  将A类对象的创建工作,完全交给B类来负责,而B类则称为工厂类,例如Mybatis的 SqlSessionFactory 与Spring的 BeanFactory


2. 代码例子:

public class Student {public Student(int i) {}
}
public class StudentFactory {public Student createStudent() {return new Student(10);}
}
public class Test {public static void main(String[] args) {Student student = new StudentFactory().createStudent();System.out.println(student);}
}

3. 优势
  1.代码解耦: 对象的创建与使用不再绑定在一起了,当我们要获取对象时,直接从工厂中拿;
  2.减少代码量: 对于一些繁琐的对象创建,我可以封装成为一个工厂。当需要创建对象时,就可以从工厂获取,减少了大部分的冗余代码。


对于设计模式的理解,还只是停留在皮毛之上,但应该明白的是,设计模式应该应对的是某些情况,而不是所有情况。

2.3.2 迭代器模式

1. 定义
  当自定义一个存储数据的容器时,应该给调用者提供一个遍历数据的工具,于是用户可以通过特定的接口,巡访容器中的每一个元素而不用了解底层的实现,最耳熟能详的例子便是集合的迭代器iterator


2. 代码例子

//链表节点类
public class Node {private Object value;//值private Node next;//下一个节点public Object getValue() {return value;}public void setValue(Object value) {this.value = value;}public Node getNext() {return next;}public void setNext(Node next) {this.next = next;}
}
public class WoniuLinkedList implements Iterable{private Node head;//链表首元素private int size;//数据长度public Node getHead() {return head;}public void setHead(Node head) {this.head = head;}public void add(Object value) {Node node = new Node();node.setValue(value);Node current=head;if(current==null) {head=node;}else {while(true) {if(current.getNext()==null) {current.setNext(node);break;}else {current=current.getNext();}}}size++;}public Object get(int index) {return node(index)==null?null:node(index).getValue();}public Node node(int index) {Node current=head;for(int i=0;iif(current==null) {return null;}current=current.getNext();}return current;}public int getSize() {return size;}public void setSize(int size) {this.size = size;}//返回一个迭代器@Overridepublic Iterator iterator() {return new WoniuLinkedListIterator(this);}}
 
//自定义迭代器
public class WoniuLinkedListIterator implements Iterator{private WoniuLinkedList list;public WoniuLinkedListIterator(WoniuLinkedList list) {this.list=list;current=list.getHead();}private Node current;@Overridepublic boolean hasNext() {//判断下一个是否存在boolean b=current==null?false:true;return b;}@Overridepublic Object next() {//返回当前这一个Node result=current;current=current.getNext();return result.getValue();}
}
 

2.3.3 适配器模式

1.定义
  百度百科显示,适配器模式指的是,将一个类的接口适配成为用户所期待的样子。

2. 代码例子

//主类
public class Master {public static void main(String[] args) {Cat cat = new Cat();Dog dog = new Dog();CatAdapter catAdapter = new CatAdapter();DogAdapter dogAdapter = new DogAdapter();ArrayList list = new ArrayList();list.add(cat);list.add(dog);ArrayList adapters = new ArrayList();adapters.add(catAdapter);adapters.add(dogAdapter);int index = (int) Math.floor(Math.random() * list.size());Object pet = list.get(index);for (Adapter adapter : adapters) {if(adapter.supports(pet)) {adapter.execute(pet);break;}}}
}
 
//适配器接口
public interface Adapter {//执行函数public void execute(Object pet);//是否支持函数public boolean supports(Object pet); 
}
//宠物猫
public class Cat {public void jump() {System.out.println("СèßäÌøµÃÕæ¸ß");}
}
//宠物猫适配器
public class CatAdapter implements Adapter{@Overridepublic void execute(Object pet) {((Cat)pet).jump();}@Overridepublic boolean supports(Object pet) {if(pet instanceof Cat) {return true;}return false;}
}
//宠物狗
public class Dog {public void run() {System.out.println("¹·×ÓÅܵÄÕæ»¶Êµ");}
}
//宠物狗适配器
public class DogAdapter implements Adapter{@Overridepublic void execute(Object pet) {((Dog)pet).run();}@Overridepublic boolean supports(Object pet) {if(pet instanceof Dog) {return true;}return false;}
}

正如菜鸟教程所言,过多地使用适配器,对于一个系统而言,无疑是一场灾难。


2.3.4 装饰器模式

1. 定义
  允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。最经典的例子便是,IO流中的字节流、字节缓冲流、对象流。


2. 代码


相关内容

热门资讯

以军称打死1名受伊朗支持并策划... 当地时间4日,以色列国防军发表声明称,以军3日凭借所谓精准情报对黎巴嫩发动空袭,打死一名受伊朗伊斯兰...
优化重大科技创新组织机制 转自:衢州日报  当前,新一轮科技革命和产业变革突飞猛进。随着科技创新活动的复杂性明显增加,国家对战...
“野能游”后半场怎么做 转自:衢州日报  记者 吴建邦 通讯员 沈海啸  7月2日,随着盛夏来临,柯城区石梁镇蒋家新堰公开水...
把牢机遇 练好内功 全面提升衢... 转自:衢州日报  本报讯 (记者 吴建邦) 7月4日上午,市委副书记、市长徐张艳调研衢州古城5A级景...
法甲霸主对阵德甲霸主 谁能晋级... 2025年世俱杯已进入白热化阶段,下半区四强争夺战堪称欧冠决赛级别的提前预演。北京时间7月6日凌晨,...
赛事带动的繁荣 ●商贸互通,赛事为媒环青赛不仅是一场体育赛事,更是一场商贸盛会。赛事带动了青海商业的积极发展,促进了...
美剧全程开车的剧从头到尾,美剧... 商业战争电视剧一般公认难拍,不出专业错误不容易精彩易懂。然而,一些精彩的美国商业战争电视剧是众所周知...
英文励志名言短句霸气,英文创业... 除非你的话发自内心,否则你永远不会打动别人。如果你说的话不是发自内心的,就不能触动别人的心弦。我们的...
我想申请创业基金贷款(创业基金... 11月5日,城市记者从省人民和社会福利厅了解到,省里已出台相关文件,对创业担保贷款政策进行补充和调整...