装饰者模式
装饰者模式:对某个类的某个功能进行增强
步骤:
- 定义一个增强类
- 在增强类中定义个被增强类的一个成员变量,通过构造传参赋值
- 定义一个方法对被增强类的某个方法进行增强
IO流的包装类就是装饰者模式,节点流是被装饰者
package com.gaj.day05;
import java.util.ArrayList;
import java.util.List;
/**
* 装饰者模式
* 需求:对list的add()方法进行装饰,过滤字符串,如果字符串长度不足2位不添加到集合中
* @author Jan
*
*/
class MyList{
private List<String> list;
public MyList(List<String> list) {
this.list = list;
}
// 定义增强的方法
// 名称与被增强的方法名称无关,可以相同也可以不一样
public void add(String str){
if(str.length() > 2){
list.add(str);
}
}
@Override
public String toString() {
return list.toString();
}
}
public class Demo5 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
MyList myList = new MyList(list);
myList.add("a");
myList.add("ab");
myList.add("abc");
myList.add("abcd");
System.out.println(list);
}
}
简单工厂模式
简单工厂:根据用户传参的不同,来创建不同的实例(对象)。
步骤:
- 抽象产品
- 具体产品继承抽象产品
- 工厂化,静态方法()中给用户返回不同的对象
package com.gaj.day05;
/**
* 简单工厂模式
* @author Jan
*
*/
// 抽象产品
abstract class TrafficTool{
public abstract void run(); // 行驶
}
// 具体产品
class Car extends TrafficTool{
@Override
public void run() {
System.out.println("提供了一辆汽车");
}
}
class Tube extends TrafficTool{
@Override
public void run() {
System.out.println("提供了一辆地铁");
}
}
// 工厂类
class TrafficFactory{
// 静态方法
public static TrafficTool getTraffic(String type){
if(type.equals("汽车")){
return new Car();
}else if(type.equals("地铁")){
return new Tube();
}
return null;
}
}
public class Demo6 {
public static void main(String[] args) {
TrafficTool car = TrafficFactory.getTraffic("汽车");
car.run();
TrafficTool tube = TrafficFactory.getTraffic("地铁");
tube.run();
}
}