SimpleFactoryPattern(23种设计模式之一)
设计模式六大原则(1):单一职责原则
设计模式六大原则(2):里氏替换原则
设计模式六大原则(3):依赖倒置原则
设计模式六大原则(4):接口隔离原则
设计模式六大原则(5):迪米特法则
设计模式六大原则(6):开闭原则
SimpleFactoryPattern,UML抽象图百度找,代码实现如下
使用简单工厂模式设计一个可以创建不同几何形状(如圆形、矩形和三角形等)的绘图工具,每个几何图形都要有计算面积area()和计算周长gride()两个方法
抽象产品类
package SimpleFactoryPattern;
public interface Product {
public float area();
public float gride();
}
具体产品类
package SimpleFactoryPattern.ConcreteProduct;
import SimpleFactoryPattern.Product;
public class Circular implements Product{
private float r;
public Circular(float r) {
this.r = r;
}
@Override
public float area() {
return 3.14f * r * r;
}
@Override
public float gride() {
return 3.14f * 2 * r;
}
}
package SimpleFactoryPattern.ConcreteProduct;
import SimpleFactoryPattern.Product;
public class Rectangle implements Product {
private float width;
private float height;
public Rectangle(float width, float height) {
this.width = width;
this.height = height;
}
@Override
public float area() {
return width * height * 1.0f;
}
@Override
public float gride() {
return (width + height) * 2.0f;
}
}
package SimpleFactoryPattern.ConcreteProduct;
import SimpleFactoryPattern.Product;
public class Triangle implements Product {
private float a;
private float b;
private float c;
public Triangle(float a, float b, float c) {
this.a = a;
this.b = b;
this.c = c;
}
@Override
public float area() {
float p = (a+b+c)/2.0f;
return (float) Math.sqrt(p*(p-a)*(p-b)*(p-c));
}
@Override
public float gride() {
return a+b+c;
}
}
简单工厂类
package SimpleFactoryPattern;
import java.util.Scanner;
import SimpleFactoryPattern.ConcreteProduct.Circular;
import SimpleFactoryPattern.ConcreteProduct.Rectangle;
import SimpleFactoryPattern.ConcreteProduct.Triangle;
public class Creator {
Scanner scan = new Scanner(System.in);
Product product=null;
public Product create(String type) { //工厂里的制造方法一定是静态吗!?
if("圆".equals(type)){
return new Circular(scan.nextFloat());
}else if("矩形".equals(type)){
return new Rectangle(scan.nextFloat(),scan.nextFloat());
}else if("三角形".equals(type)){
return new Triangle(scan.nextFloat(),scan.nextFloat(),scan.nextFloat());
}else{
return product;
}
}
}
测试类
package SimpleFactoryPattern;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Product product = new Creator().create("");
if(product==null){
System.out.println("请填写工厂条件");
}else{
System.out.println(product.area());
}
}
}
别嫌弃我没写注释,这个代码很简单,注释省略,嘿嘿。
SimpleFactoryPattern(23种设计模式之一)的更多相关文章
- Java开发中的23种设计模式详解
[放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...
- Java开发中的23种设计模式详解(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- Java开发中的23种设计模式(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- c#中的23种设计模式
C# 23种设计模式汇总 创建型模式 工厂方法(Factory Method) 在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节.工厂方法模式的核 ...
- Java 23种设计模式
转自: http://zz563143188.iteye.com/blog/1847029 ; i<count; i++){ list.add(new MailSender()); } } pu ...
- 从追MM谈Java的23种设计模式(转)
从追MM谈Java的23种设计模式 这个是从某个文章转载过来的.但是忘了原文链接.如果知道的,我追加一下. 1.FACTORY-追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西 ...
- java 23种设计模式及具体例子 收藏有时间慢慢看
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代 码可靠性. 毫无疑问,设计模式 ...
- JAVA:23种设计模式详解(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- 从追MM谈Java的23种设计模式
从追MM谈Java的23种设计模式 1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯 德基,只管向服务员说“来四个鸡 ...
- 23种设计模式全解析 (java版本)
转自:http://blog.csdn.net/longyulu/article/details/9159589 其中PHP常用的五种设计模式分别为:工厂模式,单例模式,观察者模式,策略模式,命令模式 ...
随机推荐
- codeigniter教程:Codeigniter出现Unable to connect to your databas
Codeigniter出现A Database Error Occurred错误 下午把项目构建到服务器上的时候,codeigniter竟然出现了 a database error occurred ...
- C语言的inline
一.inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义. 表达式形式的宏定义一例: #define ExpressionName(Var1,Var2) (( ...
- HihoCoder1366 逆序单词(字典树)
逆序单词 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在英文中有很多逆序的单词,比如dog和god,evil和live等等. 现在给出一份包含N个单词的单词表,其中每 ...
- Unity5-ABSystem(五):AssetBundle内存
http://blog.csdn.net/lodypig/article/details/51879702 AssetBundle内存占用 建议 实测 www加载实测 LoadFromFile加载实测 ...
- 皮肤和DLL和图片等项目文件完全整合到exe中
C#开发的程序原生界面实在是太丑了,自己又没有美化天赋,所以只能使用皮肤控件了,网上找到了IrisSkin2,包含一个.dll文件和若干ssk后缀的皮肤文件,代码其实很简单的.但是后来发现个问题,就是 ...
- MySQL 查询数据表里面时间字段为今天添加的计数
一: 下面这条语句查出来的count值 . 查询类型ID(category_id)为18的,今天插入的数据数, created_on: 为数据表中一字段 datetime类型, 记录此条数据添加的时 ...
- -3dB的理解
-3dB到底是什么?集成运放-3dB带宽又是什么? 以无源高通电路为例,介绍-3dB的意义. 输出与输入只比: Au=Uo/Ui=R/(R+1/j*2*PI*f*C)=1/(1+1/j*2*PI*f* ...
- (转)Dynamic Web project转成Maven项目
本文转载自:http://my.oschina.net/twosnail/blog/369125 1.新建Dynamic Web Project 1.File -> New -> Othe ...
- TCP和UDP数据包大小限制
1.概述 首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层. 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Da ...
- 机器学习:PCA(基础理解、降维理解)
PCA(Principal Component Analysis) 一.指导思想 降维是实现数据优化的手段,主成分分析(PCA)是实现降维的手段: 降维是在训练算法模型前对数据集进行处理,会丢失信息. ...