写在前面
在网上抄个作业居然要不没有,要不要钱!老子有个屁的钱,气得我直接写完了,分享在这里供借鉴(抄可以,但你得会了再抄)。随便转载,可以不署我名但需要声明非原创。
这是一系列的作业,所以也气了我一系列,不想后来人受气了。
本作业对《图解设计模式》这本书有不小内容的借鉴,在此感谢并推荐。
创建型设计模式实验
1、简单工厂
题目:使用简单工厂模式设计一个可以创建不同几何形状( Shape)(例如圆形( Circle).、矩形 Rectangle)和三角形( ( Triangle)等的绘图工具类,每个几何图形均具有绘制方法daw()和擦除方法 erase(),要求在绘制不支持的几何图形时,抛出一个 UnsupportedShapeException异常。绘制类图并编程模拟实现。
类图
编程实现
package TemplateMethod;
public abstract class AbstractDraw {
public void draw(){
throw new UnsupportedShapedException("绘制了不能绘制的图形");
}
public abstract void erase();
}
package TemplateMethod;
public class Circle extends AbstractDraw{
@Override
public void erase() {
System.out.println("圆形已经被清除");
}
}
package TemplateMethod;
public class Rectangle extends AbstractDraw{
@Override
public void draw() {
System.out.println("三角形已经绘制好了");
}
@Override
public void erase() {
System.out.println("矩形已经被清除");
}
}
package TemplateMethod;
public class Triangle extends AbstractDraw{
@Override
public void draw() {
System.out.println("矩形已经绘制好了");
}
@Override
public void erase() {
System.out.println("三角形已经被清除");
}
}
package TemplateMethod;
public class UnsupportedShapedException extends RuntimeException{
public UnsupportedShapedException(){
}
public UnsupportedShapedException(String strings){
super(strings);
}
}
package TemplateMethod;
public class Main{
public static void main(String[] args){
AbstractDraw c = new Circle();
AbstractDraw r = new Rectangle();
AbstractDraw t = new Triangle();
r.draw();
t.draw();
t.erase();
c.draw();
}
}
运行结果
2、工厂方法
题目:在某网络管理软件中,需要为不同的网络协议提供不同的连接类,例如针对POP3协议的连接类POP3Connection、针对IMAP协议的连接类 IMAPConnection、针对HTTP协议的连接类 HTTPConnection等。由于网络连接对象的创建过程较为复杂,需要将其创建过程封装到专门的类中,该软件还将支持更多类型的网络协议。现采用工厂方法模式进行设计,绘制类图并编程模拟实现。
类图
编程实现
package FactoryMethod.Connection;
import FactoryMethod.FrameWork.Product;
public class HTTPConnection extends Product {
private String owner;
HTTPConnection(String owner){
this.owner = owner;
System.out.println("为用户" + owner + "创建了HTTPConnection连接类");
}
@Override
public void use() {
System.out.println("用户" + owner + "在使用HTTPConnection连接类");
}
public String getOwner() {
return owner;
}
}
package FactoryMethod.Connection;
import FactoryMethod.FrameWork.Factory;
import FactoryMethod.FrameWork.Product;
import java.util.ArrayList;
import java.util.List;
public class HTTPFactory extends Factory {
private List<String> owners = new ArrayList();
@Override
protected Product createProduct(String owner) {
return new HTTPConnection(owner);
}
@Override
protected void registerProduct(Product product) {
owners.add(((HTTPConnection)product).getOwner());
}
public List getOwners(){
return owners;
}
}
package FactoryMethod.Connection;
import FactoryMethod.FrameWork.Product;
public class IMAPConnection extends Product {
private String owner;
IMAPConnection(String owner){
this.owner = owner;
System.out.println("为用户" + owner + "创建了IMAPConnection连接类");
}
@Override
public void use() {
System.out.println("用户" + owner + "在使用IMAPConnection连接类");
}
public String getOwner() {
return owner;
}
}
package FactoryMethod.Connection;
import FactoryMethod.FrameWork.Factory;
import FactoryMethod.FrameWork.Product;
import java.util.ArrayList;
import java.util.List;