Java设计模式
java中一共有23中设计模式
一共是可以分为3类:创造模式,结构模式和行为模式
创造设计模式
- 工厂模式
- 抽象工厂模式
- 单例模式
- 原型模式
- Builder模式
结构设计模式
- 调配器模式
- 桥接模式
- 组合模式
- 装饰者模式
- 外观模式
- 享元模式
- 代理模式
行为设计模式
- 责任链模式
- 命令模式
- 解释器模式
- 迭代器模式
- 调解者(Mediator)模式
- 备忘录模式
- 观察者模式
- 状态模式
- 策略模式
- 模板模式
- 访问者模式
工厂模式
在工厂模式中,不创建逻辑暴露给客户端创建对象,并使用一个通用的接口引用新创建的对象。
i. 创建一个接口public interface Sender {
public void send();
}
ii. 创建实现相同接口的具体类
public class SmsSender implements Sender {
@Override
public void send() {
System.out.println("This is a sms sender");
}
}
public class MailSender implements Sender {
@Override
public void send(){
System.out.println("This is a mailsender");
}
}
iii. 创建工厂根据给定的信息生成具体的类的对象
public class SendFactory {
public Sender produce(String type) {
if ("mail".equals(type)) {
return new MailSender();
} else if ("sms".equals(type)) {
return new SmsSender();
} else {
System.out.println("请输入正确的类型");
return null;
}
}
}
iv. 使用工厂通过传递类型等信息来获取具体类的对象。
public class FactoryTest {
public static void main(String[] args) {
SendFactory sendFactory = new SendFactory();
Sender sender = sendFactory.produce("sms");
sender.send();
}
}
抽象工厂模式
抽象工厂模式是一个超级工厂,用来创建其他工厂。这个工厂也被称为工厂的工厂。这种类型的设计模式属于创建模式,因为此模式提供了创建对象的最佳方法之一。在抽象工厂模式中,接口负责创建相关对象的工厂,而不明确指定它们的类。每个生成的工厂可以按照工厂模式提供对象。
i. 创建一个Shape接口
public interface Shape {
void draw();
}
ii. 创建实现相同接口的具体类
public class Rectangle implements Shape{
@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}
public class Square implements Shape {
@Override
public void draw() {
System.out.println("Inside Square::draw() method.");
}
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Inside Circle::draw() method.");
}
}
iii. 创建一个Colors接口
public interface Color {
void fill();
}
iv. 创建实现相同接口的具体类。
public class Red implements Color {
@Override
public void fill() {
System.out.println("Inside Red::fill() method.");
}
}
public class Green implements Color {
@Override
public void fill() {
System.out.println("Inside Green::fill() method.");
}
}
public class Blue implements Color {
@Override
public void fill() {
System.out.println("Inside Blue::fill() method.");
}
}
v. 创建实现相同接口的具体类。
public abstract class AbstractFactory {
abstract Color getColor(String color);
abstract Shape getShape(String shape) ;
}
vi. 创建实现相同接口的具体类。
创建工厂类,根据给定信息扩展AbstractFactory以生成具体类的对象。
public class ShapeFactory extends AbstractFactory {
@Override
public Shape getShape(String shapeType){
if(shapeType == null){
return null;
}
if(shapeType.equalsIgnoreCase("CIRCLE")){
return new Circle();
}else if(shapeType.equalsIgnoreCase("RECTANGLE")){
return new Rectangle();
}else if(shapeType.equalsIgnoreCase("SQUARE")){
return new Square();
}
return null;
}
@Override
Color getColor(String color) {
return null;
}
}
public class ColorFactory extends AbstractFactory {
@Override
public Shape getShape(String shapeType){
return null;
}
@Override
Color getColor(String color) {
if(color == null){
return null;
}
if(color.equalsIgnoreCase("RED")){
return new Red();
}else if(color.equalsIgnoreCase("GREEN")){
return new Green();
}else if(color.equalsIgnoreCase("BLUE")){
return new Blue();
}
return null;
}
}
vii.