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常用的五种设计模式分别为:工厂模式,单例模式,观察者模式,策略模式,命令模式 ...
随机推荐
- hdu 1671 Phone List (Trie树)
简单的字典树应用,在建树的时候判断就行了. 需要注意的语法: 在使用malloc和free来处理动态内存的时候,仅仅是释放了这个对象所占的内存,而不会调用这个对象的析构函数:使用new和delete就 ...
- MySQL5 LOAD DATA 的使用
MySQL5 LOAD DATA 的使用 数据库中,最常见的写入数据方式是通过SQL INSERT来写入,另外就是通过备份文件恢复数据库,这种备份文件在MySQL中是SQL脚本,实际上执行的还是在 ...
- NOIP模拟题 斐波那契数列
题目大意 给定长度为$n$序列$A$,将它划分成尽可能少的若干部分,使得任意部分内两两之和均不为斐波那契数列中的某一项. 题解 不难发现$2\times 10^9$之内的斐波那契数不超过$50$个 先 ...
- UVA - 10570 Meeting with Aliens (置换的循环节)
给出一个长度不超过500的环状排列,每次操作可以交换任意两个数,求把这个排列变成有序的环状排列所需的最小操作次数. 首先把环状排列的起点固定使其成为链状排列a,枚举排好序时的状态b(一种有2n种可能) ...
- CodeForces - 13D :Triangles(向量法:问多少个蓝点三角形内部无红点)
Little Petya likes to draw. He drew N red and M blue points on the plane in such a way that no three ...
- 开发mis系统用到的技术
1. b/s架构:就broser/server,浏览器/服务器的说法.服务器端要运行tomcat,提供链接数据库服务供java代码读写数据,这个可以在eclipse中配置运行.浏览器则解释jsp或ht ...
- 1151 LCA in a Binary Tree(30 分)
The lowest common ancestor (LCA) of two nodes U and V in a tree is the deepest node that has both U ...
- js中的点击事件(click)的实现方式
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- bzoj 5092 [Lydsy1711月赛]分割序列——高维前缀和
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5092 套路地弄一个前缀异或和,就变成 f[ i ]=max_{j=0}^{i} { s[ j ...
- BZOJ4170:极光
浅谈离线分治算法:https://www.cnblogs.com/AKMer/p/10415556.html 题目传送门:https://lydsy.com/JudgeOnline/problem.p ...